package blbetter.training;

import blbetter.db.Spiel;
import blbetter.netze.BlBetterInputSit;
import blbetter.netze.BlBetterNet;

public class SimulatorOneUO extends Simulator {

	protected double quoteO, deltaO;

	protected int wonO, wonU, lostO, lostU;

	public SimulatorOneUO(BlBetterNet blBetterNet, double quoteU,
			double quoteO, double stake, double deltaU, double deltaO,
			int saisonId, int abSpieltag) {
		super(blBetterNet, saisonId, abSpieltag, stake, quoteU, deltaU);
		this.quoteO = quoteO;
		this.deltaO = deltaO;
	}

	protected void competeSpiel() {
		BlBetterInputSit is;
		Spiel spiel;
		do {
			spiel = db.getRandom(abSpieltag);
			is = blBetterNet.getInputSit(spiel, db);
		} while (is.hasError());

		double op = blBetterNet.run(is.getInput());

		betU35(spiel, op);
		betO35(spiel, op);
	}

	protected void betU35(Spiel spiel, double op) {
		// wenn ev stimmt 10 wetten
		op = op - delta < 0. ? 0. : op - delta;
		double ev = (op * (quote - 1.)) - (1. - op);
		// einsatz
		double einsatz = 10.;
		// System.out.println("EV: " + ev + " Spiel: " + spiel);
		if (ev > 0.) {
			gewinn -= einsatz;
			if (spiel.heimTore + spiel.gastTore < 4) {
				gewinn += einsatz * quote;
				won++;
				wonU++;
			} else {
				lost++;
				lostU++;
			}
		}
	}

	protected void betO35(Spiel spiel, double op) {
		op = op + deltaO > 1. ? 1. : op + deltaO;
		// wenn ev stimmt 10 wetten
		double ev = ((1. - op) * (quoteO - 1.)) - op;
		// einsatz
		double einsatz = 10.;
		// System.out.println("EV: " + ev + " Spiel: " + spiel);
		if (ev > 0.) {
			gewinn -= einsatz;
			if (spiel.heimTore + spiel.gastTore > 3) {
				gewinn += einsatz * quoteO;
				won++;
				wonO++;
			} else {
				lost++;
				lostO++;
			}
		}
	}

	@Override
	public void statistik() {

	}

	@Override
	public void statistikAusgeben() {
		System.out.println("Simu[" + played + "]: " + gewinn + " GewProSpiel: "
				+ gewinn / played + " GewProWette: " + gewinn / (won + lost));
		System.out.println("Betted: " + (won + lost) + " %:"
				+ ((won + lost) * 100) / played);
		System.out.println("Won: " + won + " Lost: " + lost);
		System.out.println("%Won: " + (won * 100) / (won + lost));
		System.out.println("------------------------------");
		System.out.println("BettedU: " + (wonU + lostU) + " %:"
				+ ((wonU + lostU) * 100) / played);
		System.out.println("WonU: " + wonU + " LostU: " + lostU);
		System.out.println("%WonU: " + (wonU * 100) / (wonU + lostU));
		System.out.println("BilanzU: "
				+ (wonU * 10. * (quote - 1.) - lostU * 10.));
		System.out.println("------------------------------");
		System.out.println("BettedO: " + (wonO + lostO) + " %:"
				+ ((wonO + lostO) * 100) / played);
		System.out.println("WonO: " + wonO + " LostO: " + lostO);
		System.out.println("%WonO: " + (wonO * 100) / (wonO + lostO));
		System.out.println("BilanzO: "
				+ (wonO * 10. * (quoteO - 1.) - lostO * 10.));
	}

}
